import java.util.*;
public class M2ngijateRing{
   int jagamiseAsukoht;
   int diileriAsukoht;
   int jagamiseRing;
   List<M2ngija> m2ngijad=new ArrayList<M2ngija>();
   void lisaM2ngija(M2ngija m){m2ngijad.add(m);}
   M2ngija kysiM2ngija(int koht){return m2ngijad.get(koht);}
   void trykiJaOota(){
     try{
	   System.out.println(tutvusta());
	   Thread.sleep(2000);
	 }catch(Exception ex){}
   }
   void loosiDiileriAsukoht(Diiler d){
      loosiDiileriAsukoht(d, false);
   }
   void loosiDiileriAsukoht(Diiler d, boolean kuvaVaheTulemused){
     for(M2ngija m: m2ngijad){
	    m.lisaKaart(d.j2rgmineKaart());
		if(kuvaVaheTulemused){
		  trykiK6igile(tutvusta());
		  trykiJaOota();
		}
	 }
	 diileriAsukoht=0;
	 int suurimV22rtus=kysiM2ngija(diileriAsukoht).kysiEsimeneKaart().kysiV22rtus();
	 for(int koht=1; koht<m2ngijad.size(); koht++){
	    if(kysiM2ngija(koht).kysiEsimeneKaart().kysiV22rtus()>suurimV22rtus){
		   suurimV22rtus=kysiM2ngija(koht).kysiEsimeneKaart().kysiV22rtus();
		   diileriAsukoht=koht;
		}
	 }
	 if(kuvaVaheTulemused){
 	   trykiK6igile(tutvusta());
	   trykiJaOota();
	 }
	// System.out.println("Diileri kaardid: "+d.kaardidTekstina());
	 for(M2ngija m: m2ngijad){
	   d.lisaKaardid(m.eemaldaKaardid());
  	   if(kuvaVaheTulemused){
 	     trykiK6igile(tutvusta());
	     trykiJaOota();
	   }
	 }
	 if(kuvaVaheTulemused){trykiJaOota();}
	// System.out.println("Diileri kaardid: "+d.kaardidTekstina());
   }
   int jargmineNr(int nr){
     nr++;
	 if(nr<m2ngijad.size()){return nr;}
	 return 0;
   }
   
   //lisa ka jagamise funktsioonile parameeter kuvaVaheTulemused - 
   //et kui väärtus on tõene, siis näeb jagamise käiku.
   
   void uusJagamine(Diiler d){
      uusJagamine(d, false);
   }
   
   void uusJagamine(Diiler d, boolean kuvaVaheTulemused){
      jagamiseAsukoht=jargmineNr(diileriAsukoht);
	  jagamiseRing=1;
	  while(jagamiseRing<=2){
	     kysiM2ngija(jagamiseAsukoht).lisaKaart(d.j2rgmineKaart());
		 if(kuvaVaheTulemused){
		   //trykiK6igile(tutvusta());
		   for(int koht=0; koht<m2ngijad.size(); koht++){
		      kysiM2ngija(koht).pw.println(tutvusta(koht, false));
		   }
		   trykiJaOota();
		 }
		 if(jagamiseAsukoht==diileriAsukoht){jagamiseRing++;}
		 jagamiseAsukoht=jargmineNr(jagamiseAsukoht);		 
	  }
   }
   String tutvusta(){
      return tutvusta(-1, true);
   }
   String tutvusta(int vaatajaKoht, boolean kaardidAvalikud){
      String t="M2ngijate ring\n";
	  for(int koht=0; koht<m2ngijad.size(); koht++){
	     if(koht==diileriAsukoht){t+="D ";}
		 if(vaatajaKoht==koht){
  	       t+=kysiM2ngija(koht).tutvusta()+"\n";
		 } else {
  	       t+=kysiM2ngija(koht).tutvusta(kaardidAvalikud)+"\n";		 
		 }
	  }
	  return t;
   
   }
   void trykiK6igile(String tekst){
      for(M2ngija m: m2ngijad){
	    m.pw.println(tekst);
	  }
   }
}


